package com.jt.auth.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;


/**
 * @author 金帮嘉诚 @date 2021-08-27 星期五 14:12
 */

/**
 * 创建JWT令牌配置类,基于这个类实现令牌对象的创建和解析.
 * JWT令牌的构成有三部分构成:
 * 1)HEADER (头部信息:令牌类型,签名算法)
 * 2)PAYLOAD (数据信息-用户信息,权限信息,令牌失效时间,...)
 * 3)SIGNATURE (签名信息-对header和payload部分进行加密签名)
 */
@Configuration
public class TokenConfig {
    //这是一个令牌签发口令(规则)  自己随意设置
    //客户端在执行登录时,假如有携带这个信息,那认证服务器可以签发令牌
    private String SIGNING_KEY = "金帮嘉诚是一个超级无敌大帅逼";
//    private String SIGNING_KEY=
//            Base64
//            .encodeBase64String
//            ("金帮嘉诚是一个超级无敌大帅逼".getBytes());


    //构建令牌生成器对象
    @Bean
    public TokenStore tokenStore() {
        return new JwtTokenStore(jwtAccessTokenConverter());
    }

    //构建Jwt转换器对象 (令牌转换器对象),以及此对象创建令牌,解析令牌
    @Bean
    public JwtAccessTokenConverter jwtAccessTokenConverter() {
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();

        //设置 加密/解密口令
        converter.setSigningKey(SIGNING_KEY);
        return converter;
    }

}
